/*
题目描述
输入一行字符，分别统计出其中英文字母、空格、数字和其他字符的个数。

输入
一行字符。

输出
分别输出这行字符中的英文字母、空格、数字和其他字符的个数，用空格隔开。
请注意行尾输出换行。
*/
#include<stdio.h>
#include<string.h>
int main(){
    char str[100];


    fgets(str, sizeof(str), stdin);
    int len = strlen(str);
    if (len > 0 &&str[len - 1] == '\n')
    {
        str[len - 1] = '\0';
    }

    // 这里很重要！
    // 你不能使用scanf("%s", str)来读取字符串，因为它会在遇到空格时停止读取
    // 你需要使用fgets(str, sizeof(str), stdin)来读取字符串，因为它会读取包括空格在内的所有字符
    // 你需要理解OJ系统输入的本质是文件输入，而不是键盘输入
    // 所以你需要注意，在本地测试时输入的字符串中可能会包含换行符，导致其他字符多算了一个。而OJ系统文件输入没有换行符，导致代码在本地正常却无法提交OJ系统
    // 你需要将换行符替换为字符串结束符 '\0'，统一本地环境与OJ判题环境
    
    // 接下来所有题目带空格字符串均以本方法处理。

    int letter = 0, space = 0, digit = 0, other = 0;
    for (int i = 0; str[i] != '\0'; i++)
    {
        if (str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'A' && str[i] <= 'Z')
        {
            letter++;
        }
        else if (str[i] == ' ')
        {
            space++;
        }
        else if (str[i] >= '0' && str[i] <= '9')
        {
            digit++;
        }
        else
        {
            other++;
        }
    }
    printf("%d %d %d %d\n", letter, space, digit, other);
    return 0;
}